package com.dzx.design.behavioral.templatemethod;

/**
 * @author dzx
 * @ClassName:
 * @Description:
 * @date 2019年08月09日 11:27:00
 */
public abstract class ACourse {
    protected final void makeCourse() {
     this.makePPT();
     this.makeVideo();
     if(needWriteArticle()){
        this.writeArticle();
     }
     this.packageCourse();
    }

    final void makePPT() {
        System.out.println("制作PPT");
    }

    final void makeVideo() {
        System.out.println("制作视频");
    }

    final void writeArticle() {
        System.out.println("编写手记");
    }

    //钩子方法
    protected boolean needWriteArticle() {
        return false;
    }

    abstract void packageCourse();


}
